﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Rename.Util
{
    public class DirHelper
    {
        // 计算目录大小（包括所有子目录）
        public static long GetDirectorySize(DirectoryInfo dirInfo)
        {
            long size = 0;

            // 计算当前目录中的文件大小
            foreach (FileInfo file in dirInfo.GetFiles())
            {
                size += file.Length;
            }

            // 递归计算所有子目录的大小
            foreach (DirectoryInfo subDir in dirInfo.GetDirectories())
            {
                size += GetDirectorySize(subDir);
            }
            return size;
        }

        /// <summary>
        /// 递归统计目录中的文件和子目录数量
        /// </summary>
        /// <param name="dir">当前目录信息</param>
        /// <param name="fileCount">文件总数引用</param>
        /// <param name="dirCount">目录总数引用</param>
        public static void CountFilesAndDirectories(DirectoryInfo dir, ref int fileCount, ref int dirCount)
        {
            try
            {
                // 统计当前目录中的文件
                fileCount += dir.GetFiles().Length;

                // 获取当前目录的所有子目录
                DirectoryInfo[] subDirectories = dir.GetDirectories();

                // 统计当前目录的子目录数量
                dirCount += subDirectories.Length;

                // 递归处理每个子目录
                foreach (DirectoryInfo subDir in subDirectories)
                {
                    CountFilesAndDirectories(subDir, ref fileCount, ref dirCount);
                }
            }
            catch (UnauthorizedAccessException)
            {
                Console.WriteLine($"警告: 没有访问权限 - {dir.FullName}");
            }
            catch (PathTooLongException)
            {
                Console.WriteLine($"警告: 路径过长 - {dir.FullName}");
            }
            catch (IOException ex)
            {
                Console.WriteLine($"警告: I/O错误 - {dir.FullName}, 错误: {ex.Message}");
            }
        }
    }
}
